module(
    name = "rules_java",
    version = "8.12.0",
    bazel_compatibility = [">=6.4.0"],
    compatibility_level = 1,
)

bazel_dep(name = "platforms", version = "0.0.11")
bazel_dep(name = "rules_cc", version = "0.0.15")
bazel_dep(name = "bazel_features", version = "1.30.0")
bazel_dep(name = "bazel_skylib", version = "1.6.1")
bazel_dep(name = "protobuf", version = "27.0", repo_name = "com_google_protobuf")
bazel_dep(name = "zlib", version = "1.3.1.bcr.5")

# Required by @remote_java_tools, which is loaded via module extension.
bazel_dep(name = "rules_license", version = "0.0.3")
bazel_dep(name = "abseil-cpp", version = "20230802.1", repo_name = "com_google_absl")

register_toolchains("//toolchains:all")

toolchains = use_extension("//java:extensions.bzl", "toolchains")

# Declare remote java tools repos
use_repo(toolchains, "remote_java_tools")
use_repo(toolchains, "remote_java_tools_linux")
use_repo(toolchains, "remote_java_tools_windows")
use_repo(toolchains, "remote_java_tools_darwin_x86_64")
use_repo(toolchains, "remote_java_tools_darwin_arm64")

# Declare local jdk repo
use_repo(toolchains, "local_jdk")

register_toolchains(
    "@local_jdk//:runtime_toolchain_definition",
    "@local_jdk//:bootstrap_runtime_toolchain_definition",
)

# Declare all remote jdk toolchain config repos
JDKS = {
    # Must match JDK repos defined in remote_jdk8_repos()
    "8": [
        "linux",
        "linux_aarch64",
        "linux_s390x",
        "macos",
        "macos_aarch64",
        "windows",
    ],
    # Must match JDK repos defined in remote_jdk11_repos()
    "11": [
        "linux",
        "linux_aarch64",
        "linux_ppc64le",
        "linux_s390x",
        "macos",
        "macos_aarch64",
        "win",
        "win_arm64",
    ],
    # Must match JDK repos defined in remote_jdk17_repos()
    "17": [
        "linux",
        "linux_aarch64",
        "linux_ppc64le",
        "linux_s390x",
        "macos",
        "macos_aarch64",
        "win",
        "win_arm64",
    ],
    # Must match JDK repos defined in remote_jdk21_repos()
    "21": [
        "linux",
        "linux_aarch64",
        "linux_ppc64le",
        "linux_riscv64",
        "linux_s390x",
        "macos",
        "macos_aarch64",
        "win",
        "win_arm64",
    ],
}

REMOTE_JDK_REPOS = [(("remote_jdk" if version == "8" else "remotejdk") + version + "_" + platform) for version in JDKS for platform in JDKS[version]]

[use_repo(
    toolchains,
    repo + "_toolchain_config_repo",
) for repo in REMOTE_JDK_REPOS]

[register_toolchains("@" + name + "_toolchain_config_repo//:all") for name in REMOTE_JDK_REPOS]

# Compatibility layer
compat = use_extension("//java:rules_java_deps.bzl", "compatibility_proxy")
use_repo(compat, "compatibility_proxy")

# Dev dependencies
bazel_dep(name = "rules_pkg", version = "0.9.1", dev_dependency = True)
bazel_dep(name = "stardoc", version = "0.7.1", dev_dependency = True)
bazel_dep(name = "rules_shell", version = "0.2.0", dev_dependency = True)
bazel_dep(name = "rules_testing", version = "0.7.0", dev_dependency = True)
archive_override(
    module_name = "rules_testing",
    integrity = "sha256-0+3pLjeZCqn+K1qS7HNr7HbwMXBjxLvJm+pMSUhDel8=",
    strip_prefix = "rules_testing-db007bfee840cebcb6f955b80973ba866de38947",
    urls = ["https://github.com/bazelbuild/rules_testing/archive/db007bfee840cebcb6f955b80973ba866de38947.tar.gz"],
)

test_repositories = use_extension("//test:repositories.bzl", "test_repositories_ext", dev_dependency = True)
use_repo(test_repositories, "guava", "truth")
